package com.woniuxy.portal.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniuxy.common.consts.RedisConst;
import com.woniuxy.portal.model.entity.BookType;
import com.woniuxy.portal.service.BookTypeService;
import com.woniuxy.portal.mapper.BookTypeMapper;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author HASEE
 * @description 针对表【t_book_type】的数据库操作Service实现
 * @createDate 2025-08-02 11:43:04
 */
@Service
public class BookTypeServiceImpl extends ServiceImpl<BookTypeMapper, BookType>
        implements BookTypeService {

    /**
     * 查询所有图书类型列表
     * 1. key + value 方式：适用单个方法特定键规则
     * 2. cacheNames + keyGenerator 方式：适用多个方法共享键生成逻辑
     *
     * @return 图书类型列表
     */
    @Override
    @Cacheable(cacheNames = RedisConst.BOOK_TYPE_LIST, keyGenerator = "keyGenerator")
    public List<BookType> findAllType() {
        // 从数据库查询所有图书类型数据（null：无查询条件，即查询全部数据）
        return baseMapper.selectList(null);
    }

}

/*
    引入Redis缓存，减少对数据库的访问，提高接口性能
    方案1：RedisTemplate
        1、先从Redis中获取数据
        2、判断Redis中没有数据，则从数据库中获取数据，并保存到Redis中
        3、如果Redis中有数据，则直接返回Redis中的数据，不再查询数据库
    方案2：Spring提供了缓存注解
        1、作用：自动把方法返回的结果放入缓存中
        2、如果没有加Redis的依赖，默认数据是存储到内存中的
        3、要求方法返回的对象，需要实现Serializable接口
        4、如果添加了Redis的依赖，并启动了Redis服务器，则数据会自动存储到Redis中
 */


